package fiuba.algo3.persistencia;

import fiuba.algo3.ObjetoRobado.ObjetoRobado;
import fiuba.algo3.ObjetoRobado.ObjetoValorAlto;
import fiuba.algo3.ObjetoRobado.ObjetoValorBajo;
import fiuba.algo3.ObjetoRobado.ObjetoValorMedio;
import fiuba.algo3.XMLProcessor.nucleo.NodoXML;
import java.util.List;

public class ConstructorObjetosRobados
{
	public static final String CLASE = "ObjetoRobado";
	public static final String CLASE2 = "ObjetoValorBajo";
	public static final String CLASE3 = "ObjetoValorMedio";
	public static final String CLASE4 = "ObjetoValorAlto";

	private static boolean puedeSerConstruido(NodoXML nodo)
	{
		return nodo.nombre().equals("objeto") &&
				( nodo.obtenerValorAtributo("clase").equals(CLASE) ||
				nodo.obtenerValorAtributo("clase").equals(CLASE2) ||
				nodo.obtenerValorAtributo("clase").equals(CLASE3) ||
				nodo.obtenerValorAtributo("clase").equals(CLASE4));
	}

	public static ObjetoRobado construir(NodoXML nodoObjetoRobado)
	{
		if (!puedeSerConstruido(nodoObjetoRobado)) return null;

		List<NodoXML> tablaValores = nodoObjetoRobado.obtenerHijos();

		String nombre = "objeto robado";

		for (NodoXML nodo : tablaValores)
		{
			if (nodo.nombre().equals("campo"))
				{
					String valor = nodo.obtenerValorAtributo("nombre"); 
					if (valor.equals("nombre"))
						nombre = (String)ConstructorPrimitivos.construir(nodo.obtenerPrimogenito());
				}
		}

		String valor = nodoObjetoRobado.obtenerValorAtributo("clase");
		if (valor.equals("ObjetoValorBajo"))
			return new ObjetoValorBajo(nombre);
		else if (valor.equals("ObjetoValorMedio"))
			return new ObjetoValorMedio(nombre);
		else if (valor.equals("ObjetoValorAlto"))
			return new ObjetoValorAlto(nombre);

		return new ObjetoRobado(nombre);
	}
}
